package code06_数组;
import java.util.Arrays;
/**
 * @author 黄衡熙
 * @version 1.0
 * @date 2025年07月17日10:10
 */
public class ArrayUtil {

    public static void main(String[] args) {
//        int[] nums = {1, 3, 5, 7, 9};
//        int[] dist = new int[5];
//        copyArray(nums, dist);
//        System.out.println(Arrays.toString(dist));

//        show(nums);
//
//        change(nums, 2, 4);
//        show(nums);

//        reverse(nums);
//        System.out.println(Arrays.toString(nums));

        int[] arr = createArray(5, 1, 5);
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 实现复制数组的方法,将源数组的所有元素复制到目标数组中。两个参数:源数组,目标数组
     * @param src  源数组
     * @param dist 目标数组
     */
    public static void copyArray(int[] src, int[] dist) {
        // 两个数组元素的长度必须是一致的,否则无法复制
        if (src.length != dist.length) {
            System.out.println("错误:两个数组元素的数量不一致,无法复制");
            return;
        }
        // 遍历数组
        for (int i = 0; i < src.length; i++) {
            // 每遍历一个元素,都将该元素的值赋值给目标数组对应下标的值
            dist[i] = src[i];
        }
    }

    /**
     * 实现输出数组中元素的功能,要求数组的元素以短横杠-分隔
     * @param arr 需要打印的数组
     */
    public static void show(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length - 1) {
                System.out.print(arr[i] + "-");
            } else {
                System.out.print(arr[i]);
            }
        }
    }

    /**
     * 交换指定数组中指定位置的两个元素的值
     * @param arr
     * @param i
     * @param j
     */
    public static void change(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    /**
     * 将指定数组的所有元素颠倒过来,倒序
     * @param arr
     */
    public static void reverse(int[] arr) {
        for (int i = 0; i < arr.length / 2; i++) {
            int j = arr.length - 1 - i;
            change(arr, i, j);
        }
    }

    /**
     * 随机生成一个int类型的数组,通过方法的参数控制数组的长度、以及取值范围
     * 其值为指定范围x-y之间的整数,且数组元素的值不能重复。参数有三个:数组长度、最小值、最大值
     * @param length 数组长度
     * @param min    元素的最小值
     * @param max    元素的最大值
     */
    public static int[] createArray(int length, int min, int max) {
        // 声明一个int类型的数组,长度为length
        int[] arr = new int[length];
        // 为数组的每一个元素赋值
        for (int i = 0; i < arr.length; i++) {
            // 随机生成min-max的整数
            arr[i] = (int) (Math.random() * (max - min + 1) + min);
            // 此时赋值的内容在当前数组中可能已经存在了
            // 需要将当前随机生成的数字与当前数组中已经有的元素的值进行比较,判断该值是否已经存在
            // 只有不存在了,才能正式加入到数组中
            // 遍历已有元素的值
            for (int j = 0; j < i; j++) {
                // 如果已有元素与当前元素相等,说明重复了
                if (arr[j] == arr[i]) {
                    // 如果存在重复的,则本次生成的随机数无效,重新迭代本次循环
                    i--;
                    // 结束内层循环
                    break;
                }
            }
        }
        return arr;
    }
}